处理 onActivityResult 返回数据

1、ResultBack

public class ResultBack {

    private static final String TAG = "ACTIVITYRESULTBACK";
    private ResultBackFragment mResultBackFragment;

    public ResultBack(Fragment fragment) {
        this(fragment.getActivity());
    }

    public ResultBack(Activity activity) {
        mResultBackFragment = getResultBackFragment(activity);
    }

    private ResultBackFragment getResultBackFragment(Activity activity) {
        ResultBackFragment resultBackFragment = findResultBackFragment(activity);
        if (resultBackFragment == null) {
            resultBackFragment = new ResultBackFragment();
            FragmentManager fragmentManager = activity.getFragmentManager();
            fragmentManager.beginTransaction().add(resultBackFragment, TAG).commitAllowingStateLoss();
            fragmentManager.executePendingTransactions();
        }
        return resultBackFragment;
    }

    private ResultBackFragment findResultBackFragment(Activity activity) {
        return (ResultBackFragment) activity.getFragmentManager().findFragmentByTag(TAG);
    }

    public void startForResult(Class<?> clazz, Callback callback) {
        Intent intent = new Intent(mResultBackFragment.getActivity(), clazz);
        startForResult(intent, callback);
    }

    public void startForResult(Intent intent, Callback callback) {
        mResultBackFragment.startForResult(intent, callback);
    }

    public interface Callback {
        void onActivityResult(int resultCode, Intent data);
    }
}

2、ResultBackFragment

public class ResultBackFragment extends Fragment {
    private Map<Integer, ResultBack.Callback> mCallbacks = new HashMap<>();

    public ResultBackFragment() {
    }

    public void startForResult(Intent intent, ResultBack.Callback callback) {
        mCallbacks.put(callback.hashCode(), callback);
        startActivityForResult(intent, callback.hashCode());
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //callback方式的处理
        ResultBack.Callback callback = mCallbacks.remove(requestCode);
        if (callback != null) {
            callback.onActivityResult(resultCode, data);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }
}

3、使用

a、携带数据

Intent it = new Intent(getFragmentActivity(), ExternalActivity.class);
it.putExtra("test", "test_123456789");
new ResultBack(getFragmentActivity()).startForResult(it, new ResultBack.Callback() {
    @Override
    public void onActivityResult(int resultCode, Intent data) {

        if (resultCode == RESULT_OK && data != null) {
            String result = data.getStringExtra("back");
            LogUtils.e("result:" + result);
            ToastUtils.info(result);
        }
    }
});

返回处理

String value = getIntent().getStringExtra("test");
Intent it = new Intent();
it.putExtra("back", "final:" + value);
setResult(RESULT_OK, it);
finish();

b、不携带数据

 new ResultBack(getFragmentActivity()).startForResult(ExternalActivity.class, new ResultBack.Callback() {
    @Override
    public void onActivityResult(int resultCode, Intent data) {

        if (resultCode == RESULT_OK && data != null) {
            String result = data.getStringExtra("back");
            LogUtils.e("result:" + result);
            ToastUtils.info(result);
        }
    }
});

返回数据处理

Intent it = new Intent();
it.putExtra("back", "final:Hello World");
setResult(RESULT_OK, it);
finish();

总结

使用fragment映射实现activity生命周期,对于返回result集中处理,不必要分离了,视觉上更容易业务流程!

https://github.com/j1406493495/ResultBack